package com.zqq.baselibrary.ui.activity

import android.content.Context
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import com.zqq.baselibrary.R
import com.zqq.baselibrary.ui.receiver.NetworkChangeEvent
import com.zqq.baselibrary.utils.NetWorkUtils
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import android.graphics.PixelFormat
import android.view.*


/**
 * 此类是测试网络连接的类（其实就是BaseActivity）
 * 【未用】（仿QQ没有网络状态）
 * 默认所有继承 BaseActivity 的页面当网络状况变化活无网络时都会显示提示，
 * 如果某个页面不需要网络状态提示，可以在该页面 onCreate 方法中调用 setCheckNetWork(false) 即可。
 * (不可以自动重新发起网络请求)
 * （在此中增加一个reConnect()的方法，在网络恢复去除提示View的时候调用。在各个页面中重写该方法即可。）
 * @author zqq on 2018/7/31
 */
open class BaseNetworkActivity : BaseActivity() {

    private lateinit var mContext: Context
    private var mCheckNetWork = true //默认检查网络状态
    var mTipView: View? = null
    private lateinit var mWindowManager: WindowManager
    private lateinit var mLayoutParams: WindowManager.LayoutParams

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mContext = this

        initTipView()   //初始化提示view
        EventBus.getDefault().register(this)
    }

    override fun onResume() {
        super.onResume()
        //在无网络情况下打开APP时，系统不会发送网络状况变更的Intent，需要自己手动检查
        hasNetWork(NetWorkUtils.isConnected(mContext))
    }

    override fun onDestroy() {
        super.onDestroy()
        EventBus.getDefault().unregister(this)
    }

    override fun finish() {
        super.finish()
        //当提示View被动态添加后直接关闭页面会导致该View内存溢出，所以需要在finish时移除
        if (mTipView != null && mTipView!!.parent != null) {
            mWindowManager.removeView(mTipView)
        }
    }


    //初始化提示view
    private fun initTipView() {
        val inflater: LayoutInflater = layoutInflater
        mTipView = inflater.inflate(R.layout.layout_network_tip, null)//提示View布局
        mWindowManager = this.getSystemService(Context.WINDOW_SERVICE) as WindowManager
        mLayoutParams = WindowManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_APPLICATION,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
                PixelFormat.TRANSLUCENT)

        //使用非CENTER时，可以通过设置XY的值来改变View的位置
        mLayoutParams.gravity = Gravity.TOP
        mLayoutParams.x = 0
        mLayoutParams.y = 100
    }

    private fun hasNetWork(has: Boolean) {
        if (isCheckNetWork()) {
            if (has) {
                if (mTipView != null && mTipView!!.parent != null) {
                    mWindowManager.removeView(mTipView)
                }
            } else {
                if (mTipView!!.parent == null) {
                    mWindowManager.addView(mTipView, mLayoutParams)
                }
            }
        }
    }


    fun setCheckNetWork(boolean: Boolean) {
        mCheckNetWork = boolean
    }

    fun isCheckNetWork(): Boolean {
        return mCheckNetWork
    }


    //EventBus接收消息
    @Subscribe(threadMode = ThreadMode.MAIN)
    fun onNetworkChangeEvent(event: NetworkChangeEvent) {
        hasNetWork(event.isConnenct)
    }




}